/*
* ============================================================================
* 功能描述 ：串口配置
* 作者       ：ggls
* 创建日期 ：2024.03.27
* ----------------------------------------------------------------------------
* 更新历史 ：
*	日期 　　- 修改者   : 更新内容描述
*
* ============================================================================
*/

#include "main.h"


/******************************************************************************
 ** \brief Uart_Init
 **			初始化串口
 ** \param [in]   
 **				   
 ** \return 
******************************************************************************/

void Uart_Init(void)
{
#if 1
	 uint16_t  BRTValue = 0;
	 uint32_t  BaudRateVlue = 115200;
	 
	 /*
	 (1)设置UARTx的运行模式
	 */
	 UART_ConfigRunMode(UART0,UART_MOD_ASY_8BIT, UART_BAUD_BRT);
	 UART_EnableReceive(UART0);
	 /*
	 (2)配置UARTx的波特率
	 */
	 UART_ConfigBRTClk(BRT_CLK_DIV_1);								/* BRTCKDIV = 0*/
	
	 UART_EnableDoubleFrequency(UART0); 							/*波特率使能倍频：SMOD =1*/
	
#ifdef USE_FORMULA			  //使用公式计算定时器的加载值(需要对Systemclock赋值(main.c))，USE_FORMULA 在 选项Option->C51->Preporcessor Symbols->Define中定义
	 BRTValue = UART_ConfigBaudRate(UART0, BaudRateVlue) ;
#else 
	if(product == 0)
	{
		BRTValue = 65380;			   //使用数据手册上推荐的加载值(BRT章节)
	}
	if(product == 1)
	{
		BRTValue = 65380;			   //产测9600
	}
#endif
 
	 UART_ConfigBRTPeriod(BRTValue);						/*配置重装值*/
	 UART_EnableBRT();										/*使能定时器*/
	 /*
	 (3)配置IO口
	 */
	 GPIO_SET_MUX_MODE(P23CFG,GPIO_MUX_TXD0);			/*TXD0*/
	 GPIO_SET_MUX_MODE(P22CFG,GPIO_MUX_RXD0);			/*RXD0*/	
	 
	 /*
	 (4)设置UART中断
	 */
	 UART_EnableInt(UART0);
	 IRQ_SET_PRIORITY(IRQ_UART0,IRQ_PRIORITY_LOW);
	 IRQ_ALL_ENABLE();
#else

uint8_t  THxValue = 0;
	uint32_t  BaudRateVlue = 9600;	
   /*
	(1)设置UARTx的运行模式
	*/
	UART_ConfigRunMode(UART0,UART_MOD_ASY_8BIT, UART_BAUD_TMR1);
	UART_EnableReceive(UART0);
   /*
	(2)配置UARTx的波特率
	*/
	TMR_ConfigTimerClk(TMR1,TMR_CLK_DIV_4); 						   /*TM =1*/
	TMR_ConfigRunMode(TMR1, TMR_MODE_TIMING, TMR_TIM_AUTO_8BIT);	   /*设置为8位重装模式*/
   
	UART_EnableDoubleFrequency(UART0);							   /*波特率使能倍频：SMOD =1*/
   
#ifdef USE_FORMULA 		   //使用公式计算定时器的加载值(需要对Systemclock赋值(main.c))，USE_FORMULA 在 选项Option->C51->Preporcessor Symbols->Define中定义
	THxValue = UART_ConfigBaudRate(UART0, BaudRateVlue) ;
#else 
	THxValue = 217; 			   //使用数据手册上推荐的加载值(UART章节),对应的系统时钟：24MHz
#endif
	 THxValue = UART_ConfigBaudRate(UART0, BaudRateVlue);
	TMR_ConfigTimerPeriod(TMR1, THxValue, THxValue);		   /*配置重装值*/
	TMR_Start(TMR1);										   /*使能定时器*/
   
	/*
	(3)配置IO口
	*/
	GPIO_SET_MUX_MODE(P23CFG,GPIO_MUX_TXD0);		   /*TXD0*/
	GPIO_SET_MUX_MODE(P22CFG,GPIO_MUX_RXD0);		   /*RXD0*/
	 /*
	 (4)设置UART中断
	 */
	 UART_EnableInt(UART0);
	 IRQ_SET_PRIORITY(IRQ_UART0,IRQ_PRIORITY_HIGH);
	 IRQ_ALL_ENABLE();
#endif
	 
}


/******************************************************************************
 ** \brief Uart_Tx_buf
 **			发送数据到发送Buf
 ** \param [in]    *buf: 打包数据数组
 **				   length : 发送数组的长度
 ** \return 
******************************************************************************/

void Uart_Tx_buf(unsigned char *buf, unsigned int length)
{
	int i;
	for (i = 0; i < length; i++)
	{
		
		SBUF0 = *buf;
		buf++;
		while( UART_GetSendIntFlag(UART0) == 0);
		UART_ClearSendIntFlag(UART0);
			
	}
	
}




